<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <title>【规约】 C&#43;&#43; 编程篇 - Zexun Luo | 罗泽勋</title>
    <meta property="og:title" content="【规约】 C&#43;&#43; 编程篇 - Zexun Luo | 罗泽勋">
    
    <meta name="twitter:card" content="summary">

    
      
    

    
      
      <meta property="description" content="“码出高效，码出质量”。本文整理了比较常见的 C&#43;&#43; 编程规范，主要来源于华为《软件编程规范总则》。
[&amp;hellip;] 1.程序块要采用缩进风格编写，缩进的空格数位 4 个。对齐只用空格键，不适用tab键。
2.相对独立的程序块之间、变量说明之后必须加空行。
3.较长的语句（&amp;gt;80 字符）要分成多行书写，长表达式要在低优先级操作符划分新行，操作符放在新行之首。 &amp;hellip;">
      <meta property="og:description" content="“码出高效，码出质量”。本文整理了比较常见的 C&#43;&#43; 编程规范，主要来源于华为《软件编程规范总则》。
[&amp;hellip;] 1.程序块要采用缩进风格编写，缩进的空格数位 4 个。对齐只用空格键，不适用tab键。
2.相对独立的程序块之间、变量说明之后必须加空行。
3.较长的语句（&amp;gt;80 字符）要分成多行书写，长表达式要在低优先级操作符划分新行，操作符放在新行之首。 &amp;hellip;">
      
    

    
    
    
    <meta name="twitter:image" content="/images/logo.png">
    
    

    

    
    

    <link rel="stylesheet" href="/css/style.css" />
    <link rel="stylesheet" href="/css/fonts.css" />
    
<link rel="stylesheet" href="/css/custom.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer@1.10.0/dist/APlayer.min.css">  

  </head>

  
  <body class="post">
    <div id="pjax-content">
    <header class="masthead">
      

<h1><a href="/"><img src="/images/logo.png" alt="Zexun Luo" /></a></h1>



      <nav class="menu">
  <ul>
  
  
  <li><a href="/">主页</a></li>
  
  <li><a href="/about/">关于</a></li>
  
  <li><a href="/blog/">日志</a></li>
  
  <li><a href="/post/">技术</a></li>
  
  

  </ul>
</nav>

    </header>
    <article class="main">
      <header class="title">
      
<h1>【规约】 C&#43;&#43; 编程篇</h1>


<h3>
2021-05-28</h3>

<hr>


      </header>



<h3 id="前言">前言</h3>
<p>“码出高效，码出质量”。本文整理了比较常见的 C++ 编程规范，主要来源于华为《软件编程规范总则》。</p>
<h3 id="一排版">（一）排版</h3>
<p>1.程序块要采用缩进风格编写，缩进的空格数位 4 个。对齐只用空格键，不适用tab键。<br>
2.相对独立的程序块之间、变量说明之后必须加空行。<br>
3.较长的语句（&gt;80 字符）要分成多行书写，长表达式要在低优先级操作符划分新行，操作符放在新行之首。<br>
4.if、for、do、while、case、switch、default 等语句自占一行，且执行语句部分无论多少都要加括号 {}。</p>
<h3 id="二注释">（二）注释</h3>
<p>1.一般情况下，源程序有效注释量必须在 20% 以上。<br>
2.说明性文件（如头文件 .h 文件、.inc 文件、.def 文件等）头部应进行注释，注释必须列出：版权说明、版本号、生成日期、作者、内容、功能、与其他头文件关系、修改日志等，头文件注释中还应有函数功能简要说明。<br>
3.源文件头部应进行注释，列出：版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。<br>
4.函数头部应进行注释，列出：函数的目的/功能、输入参数、输出参数、返回值、调用关系（函数、表）等。<br>
5.边写代码边注释，修改代码同时修改响应的注释。不再有用的注释 要删除。<br>
6.注释格式尽量统一，建议使用“/<em>…………</em>/”。<br>
7.注释应考虑程序易读性，建议使用中文。</p>
<h3 id="三标识符命名">（三）标识符命名</h3>
<p>1.命名规范必须与所使用的系统风格保持一致，并在同一项目中统一，比如采用 UNIX 的全小写加下划线风格或大小写混排的方式，不要将两种方式混合使用。用作特殊标识如标识成员变量或全局变量的 m_ 和 g_，其后加上大小写混排的方式是允许的。<br>
示例：Add_User 不允许，add_user、AddUser、m_AddUser允许。</p>
<p>2.用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。<br>
说明：以下是一些在软件中常用的反义词组。<br>
add / remove    begin / end    create / destroy<br>
insert /delete    first / last    get / release<br>
increment / decrement    put / get<br>
add /delete    lock unlock    open /close<br>
min / max    old /new     stat / stop<br>
next /previous    source / target    show / hide<br>
send / receive    source / destination <br>
cut /paste    up / down<br>
示例：<br>
int min_sum;<br>
int max_sum;<br>
int add_user( BYTE *user_name );<br>
int delete_user( BYTE *user_name);</p>
<h3 id="四可测性">（四）可测性</h3>
<p>1.使用断言来发现软件问题，提高代码可测性。</p>
<h3 id="五程序效率">（五）程序效率</h3>
<p>1.多重循环中，应将最忙的循环放在最内层。<br>
2.尽量减少循环嵌套层次。<br>
3.尽量使用乘法或其他方法代替除法特别是浮点运算中的除法（占用较多 CPU 资源）。</p>
<h3 id="六质量保证">（六）质量保证</h3>
<p>1.防止引用已经释放的内存空间。<br>
2.过程/函数中分配的内存，在过程/函数退出之前要释放。<br>
3.过程/函数中申请的（为打开文件而使用的）文件句柄，在过程/函数退出之前要关闭。<br>
4.防止内存操作越界。<br>
5.编程时，要防止差 1 错误。（&lt;=、&lt;等注意）<br>
6.if 语句尽量加上 else 分支，switch 语句必须有 default 分支。<br>
7.Unix 下，多线程的子线程退出必需采用主动退出的方式，即子线程应 return 出口。<br>
8.时刻注意表达式是否会上溢、下溢。使用变量时要注意其边界值的情况。</p>


  
  <nav class="post-nav">
    <span class="nav-prev">&larr; <a href="/post/javacodingguidelines/">【规约】 Java 编程篇</a></span>
    <span class="nav-next"><a href="/post/2021-6-1/">从零开始搭建个人网站——小白篇</a> &rarr;</span>
  </nav>
  <script type="text/javascript">
  document.addEventListener('keyup', function(e) {
    if (e.target.nodeName.toUpperCase() != 'BODY') return;
    var url = false;
    if (e.which == 37) {  
      
      url = '\/post\/javacodingguidelines\/';
      
    } else if (e.which == 39) {  
      
      url = '\/post\/2021-6-1\/';
      
    }
    if (url) window.location = url;
  });
  </script>
  
  </article>
  </div>
  <footer>
  
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="/js/jquery.pjax.js"></script>
<script src="/js/pjax.config.js"></script>

<div class="music">
<div id="player" class="aplayer"></div>
</div>
<script src="https://cdn.jsdelivr.net/npm/aplayer@1.10.0/dist/APlayer.min.js"></script>  

<script type="text/javascript">
const ap = new APlayer({
    container: document.getElementById('player'),
    order: 'random',
    listFolded: true,
    listMaxHeight: 90,
    theme:	'#b7daff',
    audio: [
    {
        name: 'きこえるかしら',
        artist: '大和田りつこ',
        url: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/music/赤毛のアンOP_きこえるかしら_大和田りつこ.mp3',
        cover: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/image/赤毛のアンOP_きこえるかしら_大和田りつこ.jpeg'
      },
      {
        name: 'まっててごらん',
        artist: '大杉久美子',
        url: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/music/大杉久美子_ネリー・シュワルツ_まっててごらん.mp3',
        cover: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/image/大杉久美子_ネリー・シュワルツ_まっててごらん.png'
      },
      {
        name: 'ペリーヌ物語',
        artist: '片头曲和片尾曲',
        url: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/music/世界名作劇場_ペリーヌ物語_OP_ED.mp3',
        cover: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/image/世界名作劇場_ペリーヌ物語_OP_ED.jpg'
      },
      {
        name: 'ほほえみの魔法',
        artist: 'トラップ一家物語',
        url: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/music/Trapp_Family_Story_Hohoemi_no_mahou_ほほえみの魔法_Smil.mp3',
        cover: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/image/Trapp_Family_Story_Hohoemi_no_mahou_ほほえみの魔法_Smil.jpg'
      },
      {
        name: 'It is a Small world',
        artist: 'Disney Classics',
        url: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/music/Disney_Classics_It_s_a_Small_World_It_s_a_Small.mp3',
        cover: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/image/Disney_Classics_It_s_a_Small_World_It_s_a_Small.jpg'
      },
      {
        name: 'Forrest Gump Suite',
        artist: 'Alan Silvestri',
        url: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/music/Alan_Silvestri_Forrest_Gump_Suite2.mp3',
        cover: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/image/Alan_Silvestri_Forrest_Gump_Suite.jpeg'
      },





  ]
});
</script>




<script async src="/js/fix-toc.js"></script>

<script async src="/js/center-img.js"></script>

<script async src="/js/right-quote.js"></script>

<script async src="/js/no-highlight.js"></script>

<script async src="/js/fix-footnote.js"></script>

<script async src="/js/math-code.js"></script>

<script async src="/js/external-link.js"></script>

<script async src="/js/alt-title.js"></script>

<script async src="/js/header-link.js"></script>




  

  
  <hr>
  <div class="copyright">© <a href="/">Zexun Luo</a> 2020 - 2021</div>
  
  </footer>
  
  </body>
</html>

